﻿\subsubsection{MIPS}

\lstinputlisting[caption=\Optimizing GCC 4.4.5 (IDA),style=customasmMIPS]{patterns/10_strings/1_strlen/MIPS_O3_IDA_RU.lst}

\myindex{MIPS!\Instructions!NOR}
\myindex{MIPS!\Pseudoinstructions!NOT}
В MIPS нет инструкции \NOT, но есть \NOR~--- операция \TT{OR~+~NOT}.

Эта операция широко применяется в цифровой электронике\footnote{\NOR называют \q{универсальным элементом}}.
\index{Apollo Guidance Computer}
Например, космический компьютер Apollo Guidance Computer использовавшийся в программе \q{Аполлон} был
построен исключительно на 5600 элементах \NOR: 
[Jens Eickhoff, \IT{Onboard Computers, Onboard Software and Satellite Operations: An Introduction}, (2011)].
Но элемент NOR не очень популярен в программировании.

Так что операция \NOT реализована здесь как \TT{NOR~DST,~\$ZERO,~SRC}.

Из фундаментальных знаний \myref{sec:signednumbers}, мы можем знать, что побитовое инвертирование знакового
числа это то же что и смена его знака с вычитанием 1 из результата.

Так что \NOT берет значение $str$ и трансформирует его в $-str-1$.

Следующая операция сложения готовит результат.

